←
▼
▲
デバッガで、オブジェクトをウォッチして、[Method] を展開すると、メソッドの一覧が分かります。
←
▼
▲
→ タイプライブラリ
関連
TypeLib.Guid as string
参考
GUID を生成し、生成した GUID を文字列で返します。
"{8DECCFAC-499B-4510-B3E1-95C68FA794DE}"+Chr(0)+"-"
取得できる文字列の例:
{ … } を取り出すには次のようにしてください。
Dim TypeLib : Set TypeLib = CreateObject("Scriptlet.TypeLib")
s = Left( TypeLib.Guid, 38 )
+Chr(0)+"-"
{ } の中だけ取り出すには次のようにしてください。
Dim TypeLib : Set TypeLib = CreateObject("Scriptlet.TypeLib")
s = Mid( TypeLib.Guid, 2, 36 )
←
▼
▲
その他
←
▼
▲
Dim sh_ap
Set sh_ap = CreateObject( "Shell.Application" )
version 5.00
Windows 95 系
version 4.71
Windows 2000 系
フォルダや特殊フォルダを取得します
関連オブジェクト一覧
メンバ
その他
上記で取得できた sh_ap は、
と
エクスプローラ(シェル)ができる操作を自動化するための COM オブジェクトです。
WSH は Win2000 から標準搭載
サンプル:
ゴミ箱へ捨てる
の両方の
メンバを持つオブジェクトです
ダブルクリックで開く
←
▼
▲
フォルダや特殊フォルダのオブジェクトを取得します
フォルダをエクスプローラで開きます。
( "Shell.Application" ) から取得した
Shell オブジェクトは、
メンバ
オブジェクトから使うことができます。
←
▼
▲
Function Shell::NameSpace( name as variant ) as Folder
NameSpace( "::{645FF040-5081-101B-9F08-00AA002F954E}" )
→ 特殊フォルダ
特殊フォルダの GUID を指定
特殊フォルダの番号を指定
NameSpace( 10 ) ' ごみ箱
フォルダや特殊フォルダのオブジェクトを取得します
フォルダのフル・パスを指定
NameSpace( "C:\folder1" )
【引数】
name
返り値
パスや特殊フォルダの GUID や番号
ファイルのパスは指定できません。
または Nothing
関連
ファイルに相当するオブジェクトの取得
←
▼
▲
Sub Shell.Open( dir as variant )
フォルダをエクスプローラで開きます。
dir 引数
"C:\folder"
フォルダへのパス
10
→ 特殊フォルダ
特殊フォルダの番号
←
▼
▲
ファイルやフォルダを移動します。
メンバ
から取得できます。
Folder オブジェクトは、
フォルダの内容の集合を返します。
←
▼
▲
Folder オブジェクトのフォルダに、ファイルやフォルダーをコピーします。
Sub Folder::CopyHere( Item as variant [, Options as integer] )
【引数】
Item
Options
コピー元のファイルやフォルダー、または、そのフル パス
オプション(16=すべて「はい」)
参考
Sub Main( Opt, AppKey )
source_path = "C:\home\mem_cache\MyDoc\src\OSDN\vbslib\*"
destination_path = g_sh.SpecialFolders( "Desktop" ) +"\_back_up"
Const FOF_CREATEPROGRESSDLG = &h00
Const FOF_NOCONFIRMATION = &H10
Set sh_app = CreateObject( "Shell.Application" )
Set w_= AppKey.NewWritable( destination_path ).Enable() '// for mkdir
mkdir destination_path
Set destination_folder = sh_app.NameSpace( destination_path )
destination_folder.CopyHere source_path, FOF_CREATEPROGRESSDLG + FOF_NOCONFIRMATION
WScript.Echo "Done!"
End Sub
Set g_sh = WScript.CreateObject( "WScript.Shell" )
サンプル
ウィンドウてコピーの進捗を表示しながらコピーする
ファイルやフォルダーのコピーが完了するまで戻りません。
中断したかどうかを調べることはできません。 ただし、1つのファイルのコピーなら、ファイルの
サイズをチェックすれば判定できます。
←
▼
▲
Folder オブジェクトのフォルダに、ファイルやフォルダーを移動します。
Sub Folder::MoveHere( Item as variant [, Options as integer] )
【引数】
Item
Options
移動元のファイルやフォルダー、または、そのパス
オプション(16=すべて「はい」)
実際にファイルなどが移動する前に、このプロシージャから戻ります。
移動が完了する前に、スクリプトのプロセスが終了すると、
移動は行われません。
Sub del_to_trashbox( path )
Dim g_fs, sh_ap, TrashBox, fo, fi, fname
Set sh_ap = CreateObject("Shell.Application")
Set g_fs = CreateObject("Scripting.FileSystemObject")
Const ssfBITBUCKET = 10
fname = g_fs.GetFileName( path )
Set fo = sh_ap.NameSpace( g_fs.GetParentFolderName( path ) )
Set fi = fo.Items.Item( fname )
Set TrashBox = sh_ap.NameSpace( ssfBITBUCKET )
TrashBox.MoveHere fi
Do
WScript.Sleep 300
Set fi = fo.Items.Item( fname )
If fi is Nothing Then Exit Do
fi = Empty
Loop
End Sub
サンプル: ファイルやフォルダーをゴミ箱へ捨てる
←
▼
▲
フォルダの内容の集合を返します。
Function Folder::Items() as FolderItems
【引数】
返り値
←
▼
▲
FolderItems オブジェクトは、
から取得できます。
フォルダの内容の集合です。
メンバ
フォルダの内容を1つ返します。
←
▼
▲
フォルダの内容を1つ返します。
Function FolderItems::Items( name as variant ) as FolderItem
【引数】
返り値
name
番号、または、ファイル名
Dim sh_ap, folder, file
Set sh_ap = CreateObject( "Shell.Application" )
Set folder = sh_ap.NameSpace( "C:\" )
Set file = fo.Items.Item( "file.txt" )
次のようにして、ファイルに相当する FolderItem を取得できます。
または Nothing
←
▼
▲
FolderItem オブジェクトは、
から取得できます。
ファイル、フォルダ、ショートカットに相当します。
←
▼
▲
IShellDispatch2 のメソッドは、CreateObject( "Shell.Application" ) から取得した
オブジェクトから使うことができます。
メンバ
エクスプローラから選べるプログラムを起動します
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Desktop\a.txt"
サンプル
←
▼
▲
Sub IShellDispatch2::ShellExecute( Path as string, [ Arguments as string,
WorkingDir as string, Verb as string, Show as integer ] )
エクスプローラから選べるプログラムを起動します
【引数】
Path
Arguments
ファイルやフォルダのパス
プログラムに渡すパラメータ
WorkingDir
カレント・ディレクトリ
Verb
エクスプローラのコマンド名(Verb=動詞)
Show
起動時のウィンドウの状態
Windows Vista では、Verb="runas" にすると、「管理者として実行」になります。
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Desktop\a.txt"
サンプル: .txt に関連付けられたアプリケーションを開きます。(下記パスはVista用)
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Documents"
サンプル: ドキュメント・フォルダを開きます。(下記パスはVista用)
関連
参考
←
▼
▲
Const adReadAll = -1
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Charset = "UTF-8"
f.Open
f.LoadFromFile "utf8bom.xml"
echo f.ReadText( adReadAll )
f.Close
echo TypeName( f ) '// "Stream"
任意の文字コードのテキストファイル、バイナリ・ファイル、または、データ・ベースにアクセスします。
→ C:\Program Files\Common Files\System\ado フォルダ
DLL
Const adReadAll = -1
Const adTypeBinary = 1
Dim bin
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Type = adTypeBinary
f.Open
f.LoadFromFile "a.bin"
bin = f.Read( adReadAll )
f.Close
「ADODB.Stream: オブジェクトまたはプロバイダーは要求された操作を実行できません。」
というエラーになるときは、環境変数の値に問題がある可能性があります。
トラブル・シューティング
関連
←
▼
▲
ConvertTextFile "utf16.xml", "UTF-16", "utf8bom.xml", "UTF-8"
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Const adReadAll = -1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.Open
wf.Open
rf.LoadFromFile SrcPath
wf.WriteText rf.ReadText( adReadAll )
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Const adReadLine = -2
Const adWriteLine = 1
Const adSaveCreateOverWrite = 2
Const adCRLF = -1
Const adLF = 10
Dim t
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.LineSeparator = adLF
wf.LineSeparator = adLF
rf.Open
wf.Open
rf.LoadFromFile SrcPath
Do
t = rf.ReadText( adReadLine )
wf.WriteText t, adWriteLine
If rf.EOS Then Exit Do
Loop
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
参考
CR+LF を出力するときは、wf.WriteText t +vbCR, adWriteLine のように、
vbCR が必要です。
Const adReadLine = -2
Const adWriteChar = 0
Const adWriteLine = 1
Const adCRLF = -1
Const adLF = 10
Const adSaveCreateOverWrite = 2
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Dim t
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.Open
wf.Open
rf.LoadFromFile SrcPath
Do
t = rf.ReadText( adReadLine )
WriteLineTmp wf, t
If rf.EOS Then Exit Do
Loop
'// WriteLineTmp wf, "#あいう" '// CR+LF
'// WriteLineTmp wf, "#えお"+vbLF '// LF
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
Sub WriteLineTmp( f, line )
'// if CRLF + alpha mode
If Right( line, 1 ) = vbLF Then
f.WriteText line, adWriteChar
Else
f.WriteText line, adWriteLine
End If
End Sub
行末に改行文字が無いときに、CR+LF、行末に vbLF があるときに
LF を出力するようにするには、下記のようにします。
関連
←
▼
▲
Const adWriteLine = 1
Const adCRLF = -1
Const adLF = 10
Const adSaveCreateOverWrite = 2
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Charset = "EUC-JP"
f.LineSeparator = adLF
f.Open
f.WriteText "あいう", adWriteLine
f.SaveToFile "out.txt", adSaveCreateOverWrite
f.Close
←
▼
▲
Property Stream::Type as integer
バイナリ・ストリームか、テキスト・ストリームか。
adTypeBinary (=1)
adTypeText (=2)
デフォルト
が 0 のときに変更できます。
←
▼
▲
Property Stream::Charset as string
アクセスするときの文字コード。
指定できる値は、HKEY_CLASSES_ROOT\MIME\Database\Charset のサブキーを参照してください。
値の例:
"ascii", "shift_jis", "euc-jp", "unicode", "utf-8", "iso-8859-1", "_autodetect"
参考
→ 漢字文字コード
大文字小文字は区別しません。
"utf-8" は、BOM が有っても無くてもリードはできます。 ライトすると BOM は付きます。
"_autodetect" は、自動判定します。
サンプル
Charset を設定する前に、.Position = 0 かつ .Type = adTypeText にする必要があります。
注意
→ コードページ
←
▼
▲
Property Stream::LineSeparator as integer
改行文字コード。
adCR (=13)
adCRLF (=-1)
adLF (=10)
Windows 標準 (デフォルト)
Linux 標準、Mac OS X
リード・ストリームでは、改行文字コードが合っていないと、ADODB.Stream::ReadText
で adReadLine したときに、ファイルに記述されている改行文字が入ります。
ファイル
LineSeparator
ReadText - adReadLine の返り値
CR+LF
LF
行の内容
LF
CR+LF
行の内容
行の内容 (改行文字なし)
CR+LF
CR+LF
LF
LF
行の内容 (改行文字なし)
この関係があるので、リード・ストリームと、ライト・ストリームの両方を LF に設定する
と、改行文字が CR+LF の行と LF の行が混ざっていても、改行文字はリード側から
ライト側へ継承されます。
参考
改行の無い最終行
LF
行の内容 (改行文字なし)
CR+LF
改行の無い最終行
行の内容 (改行文字なし)
+LF
+CR
←
▼
▲
Property Stream::Mode as integer
改行文字コード。
adModeRead (=1)
デフォルト
adModeReadWrite (=3)
adModeRecursive (=&h0x400000)
adModeWrite (=2)
リード、または、1バイトずつの追加
adModeShareDenyWrite (=8)
他にもあります。
←
▼
▲
Sub Stream::Open( [ Source as string, ... ] )
ネットワークのフォルダー、またはローカル・マシンを開きます。
ローカル・マシンの場合、パラメーターは省略します。
f.Open
f.Open "URL=scheme://server/folder"
ネットワークの場合、URL= に続けてください(未確認)
関連
サンプル
←
▼
▲
Sub Stream::Close()
ネットワークのフォルダー、またはローカル・マシンを閉じます。
サンプル